java.io.IOException: CreateProcess error=2, ?????????

您所在的位置:网站首页 java processbuilder报错 java.io.IOException: CreateProcess error=2, ?????????

java.io.IOException: CreateProcess error=2, ?????????

2023-08-28 12:02| 来源: 网络整理| 查看: 265

最近由于工作需要,使用java在调用cmd程序时,为了避免在路径当中有多个空格(例如:c:\\aa   a\t t\m     m),所以使用了

 Runtime time = Runtime.getRuntime();

 try{

     time.exec(new String[]{"Sp.exe"}, null, new File(args[1]));

   }catch(Exception e){

    e.printStackTrace();

   }

遇到了java.io.IOException: CreateProcess error=2, ?????????异常,找了很多原因都没有弄明白,然而使用

time.exec(new String[]{"java","-jar","Sp.jar"}, null, new File(args[1]));就可以!

如果使用:(前提是不能有不规则的空格出现)

 Runtime time = Runtime.getRuntime();

 try{

     String command = "args[1]"+File.separator+Sp.exe;

     time.exec(command);

   }catch(Exception e){

    e.printStackTrace();

   }

也可以,同样在底层都是使用的ProcessBuilder去创建的进程,只是传递的参数不一样,结果就不一样。

我的理解是,在java中去执行exe文件,使用第一种方式,目录中windows在执行程序Sp.exe时,与主程序的工作目录不一样,就是说user.dir不一样,因为进程的工作目录不同,所以在创建进程时报错。

虽然你能在java程序中遍历到你需要的文件。

为了避免出现多个空格的情况,继续实验,最终找到了解决的方案:

Runtime time = Runtime.getRuntime();

 try{

    time.exec(new String[]{"cmd","/c","Sp.exe"}, null, new File(args[1]));

   }catch(Exception e){

    e.printStackTrace();

   }

cmd /c中具体含义,你在dos中输入 cmd /?就可以查看



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3